
public abstract class Roupa {
	
	private String nome;
	private Cor cor;
	private int referencia;
	private Classificacao classificacao;
	private String formaDeUso;
		
	public Roupa(String nome, Cor cor, Classificacao classificacao, String formaDeUso){
		if (nome == null) {
			throw new IllegalArgumentException(
					"A nome da roupa nao pode ser nula.");
		}
		if (cor == null) {
			throw new IllegalArgumentException(
					"A cor da roupa nao pode ser nula.");
		}
		if (classificacao == null) {
			throw new IllegalArgumentException(
					"A classificacao da roupa nao pode ser nula.");
		}
		if (formaDeUso == null) {
			throw new IllegalArgumentException(
					"A forma de uso da roupa nao pode ser nula.");
		}
		this.nome = nome;
		this.cor = cor;
		this.classificacao = classificacao;
		this.formaDeUso = formaDeUso;
	}
	
	/**
	 * Retorna o nome da roupa
	 * @return nome 
	 */
	public String getNome(){
		return this.nome;		
	}
	
	/**
	 * Retorna a cor da roupa
	 * @return cor
	 */
	public Cor getCor(){
		return this.cor;
	}
	
	/**
	 * Retorna a referencia da roupa
	 * @return referencia
	 */
	public int getReferencia(){
		return this.referencia;
	}
	
	/**
	 * Retorna a classificacao da roupa
	 * @return classificacao
	 */
	public Classificacao getClassificacao(){
		return this.classificacao;
	}
	
	/**
	 * Retorna a forma de uso da roupa
	 * @return forma de uso
	 */
	public String getFormaDeUso(){
		return this.formaDeUso;
	}
	
	/**
	 * Retorna o tipo da roupa
	 * @return tipo
	 */
	public abstract String getTipo();
	
	/**
	 * Seta o nome da roupa 
	 * @param nome
	 * @throws Exception
	 */
	public void setNome(String nome) throws Exception{
		if(nome == null){
			throw new IllegalArgumentException("O nome da roupa nao pode ser nulo.");
		}
		this.nome = nome;
	}
	
	/**
	 * Seta a cor da roupa
	 * @param cor
	 * @throws Exception
	 */
	public void setCor(Cor cor) throws Exception{
		if (cor == null) {
			throw new IllegalArgumentException(
					"A nome da roupa nao pode ser nulo.");
		}
		this.cor = cor;
	}
	
/*
 * Esse metodo nao deve existir jah que quem  vai colocar a referencia  sera nos...
 *
	/**
	 * Retorna a referencia da roupa
	 * @return referencia
	 *
	public int setReferencia(){
		return this.referencia;
	}
*/	
	
	/**
	 * Retorna a classificacao da roupa
	 * @param classificacao
	 * @throws Exception
	 */
	public void setClassificacao(Classificacao classificacao) throws Exception{
		if (classificacao == null) {
			throw new IllegalArgumentException(
					"A classificacao da roupa nao pode ser nula.");
		}
		this.classificacao = classificacao;
	}
	
	/**
	 * Retorna a forma de uso da roupa
	 * @param formaDeUso
	 * @throws Exception
	 */
	public void setFormaDeUso(String formaDeUso) throws Exception{
		if(formaDeUso == null){
			throw new IllegalArgumentException("A forma de uso da roupa nao pode ser nula.");
		}
		this.formaDeUso = formaDeUso;
	}

	/**
	 * Seta o tipo da roupa
	 * @param tipo
	 * @throws Exception
	 */
	public abstract void setTipo(String tipo)throws Exception;
		
	
}
